/****************************************************************************
 *   $Id:: timer.h 3635 2011-08-32 by tankery.chen@gmail.com                $
 *   Project: NXP LPC11xx software example
 *
 *   Description:
 *     This file contains definition and prototype for 32-bit timer 
 *     configuration.
 *
 ****************************************************************************
 * Software that is described herein is for illustrative purposes only
 * which provides customers with programming information regarding the
 * products. This software is supplied "AS IS" without any warranties.
 * NXP Semiconductors assumes no responsibility or liability for the
 * use of the software, conveys no license or title under any patent,
 * copyright, or mask work right to the product. NXP Semiconductors
 * reserves the right to make changes in the software without
 * notification. NXP Semiconductors also make no representation or
 * warranty that such application will be suitable for the specified
 * use without further testing or modification.
****************************************************************************/
#ifndef __TIMER_H 
#define __TIMER_H

static LPC_TMR_TypeDef (* const LPC_TMR16B[2]) = { LPC_TMR16B0, LPC_TMR16B1 };
static LPC_TMR_TypeDef (* const LPC_TMR32B[2]) = { LPC_TMR32B0, LPC_TMR32B1 };

#define TIMER16       (LPC_TMR16B)
#define TIMER32       (LPC_TMR32B)

/* The test is either MAT_OUT or CAP_IN. Default is MAT_OUT. */
#define TIMER_MATCH		(1)

#define EMC0	(4)
#define EMC1	(6)
#define EMC2	(8)
#define EMC3	(10)

#define MATCH0	(1<<0)
#define MATCH1	(1<<1)
#define MATCH2	(1<<2)
#define MATCH3	(1<<3)

#ifndef TIME_INTERVAL
#define TIME_INTERVAL	(SystemAHBFrequency/1000 - 1)
/* depending on the SystemFrequency and SystemAHBFrequency setting, 
if SystemFrequency = 60Mhz, SystemAHBFrequency = 1/4 SystemAHBFrequency, 
10mSec = 150.000-1 counts */
#endif


typedef void (* callback_void)(void*);

void TimerDelayMs(LPC_TMR_TypeDef * const timer, uint32_t delayInMs);
void TimerDelayUs(LPC_TMR_TypeDef * const timer, uint32_t delayInUs);
void TIMER16_0_IRQHandler(void);
void TIMER16_1_IRQHandler(void);
void TIMER32_0_IRQHandler(void);
void TIMER32_1_IRQHandler(void);
void TimerSetIntCallback(LPC_TMR_TypeDef * const timer, callback_void func);
void TimerInit(LPC_TMR_TypeDef * const timer);
void TimerEnable(LPC_TMR_TypeDef * const timer);
void TimerDisable(LPC_TMR_TypeDef * const timer);
void TimerSetTime(LPC_TMR_TypeDef * const timer, uint32_t timerInterval);
void TimerClear(LPC_TMR_TypeDef * const timer);
void TimerInitPWM(LPC_TMR_TypeDef * const timer, uint32_t period, uint8_t match_enable);
void TimerSetMatchPWM (LPC_TMR_TypeDef * const timer, uint8_t match_nr, uint32_t value);
void TimerInitCounter(LPC_TMR_TypeDef * const timer);

#endif /* end __TIMER_H */
/*****************************************************************************
**                            End Of File
******************************************************************************/
